<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>块级作用域与函数声明</title>
</head>
<body>
    <script>
/**
 * ES5和ES6中对于预解析块级作用域内定义的函数的方式不同
 * 在ES5中不管函数是否定义在块级作用域中，在进行预解析的时候函数名都会被指定为function类型
 * 这也就是为什么使用function定义的函数可以在函数定义位置的上方访问到函数了，因为在预解析的时候就已经指定变量是一个函数类型了
 * 而在ES6中对于定义在块级作用域中的函数的预解析和ES5不同，类似于ES5中对var定义的变量预解析那样
 * 首先会被预解析为undefined直到代码运行到函数定义位置的时候才会将变量指定为函数类型，也就是说ES6中定义在块级作用域中的函数不能在定义之前就进行调用
 * 
 * 为了让浏览器在不同环境中效果一样，块级作用域中最好将函数定义为let fun =function()这种类型
*/


         /*
           在ES5中可以正常执行，但是在ES6中不能会报错
         */
        // function foo(){
        //     fee();
        //     if(true){
        //         function fee(){
        //             console.log("bbbb");
        //         }
        //     }
        // }
        //     foo();

        /*同上*/
        // function foo(){
        //     fee();
        //     {
        //         function fee(){
        //             console.log("bbbb");
        //         }
        //     }
           
               
           
        // }
        // foo();


    </script>
</body>
</html>